#include <bits/stdc++.h>

using namespace std;

class Solution
{
public:
    //@ysh's method,pass 24/50
    // int findMinArrowShots(vector<vector<int>> &points)
    // {
    //     vector<vector<int>> res;
    //     res.push_back(points[0]);
    //     for (size_t i = 1; i < points.size(); i++)
    //     {
    //         bool flag = false;
    //         for (size_t j = 0; j < res.size(); j++)
    //         {
    //             if (!(points[i][0] > res[j][1] || points[i][1] < res[j][0]))
    //             {
    //                 flag = true;
    //                 break;
    //             }
    //         }
    //         if (flag == false)
    //         {
    //             res.push_back(points[i]);
    //         }
    //     }
    //     return res.size();
    // }

    // book's method
    static bool cmp(vector<int> &a, vector<int> &b)
    {
        return a[0] < b[0];
    }
    int findMinArrowShots(vector<vector<int>> &points)
    {
        int result = 1;
        sort(points.begin(), points.end(), cmp);
        for (size_t i = 1; i < points.size(); i++)
        {
            if (points[i - 1][1] < points[i][0])
            {
                result++;
            }
            else
            {
                points[i][1] = min(points[i - 1][1], points[i][1]);
            }
        }
        return result;
    }
};

int main()
{
    vector<vector<int>> points{
        {10, 16},
        {2, 8},
        {1, 6},
        {7, 12}};
    Solution sol;
    cout << sol.findMinArrowShots(points) << endl;
    return 0;
}